home *** CD-ROM | disk | FTP | other *** search
- #!/usr/app/bin/perl
-
- eval 'exec /usr/app/bin/perl -S $0 ${1+"$@"}'
- if 0; # not running under some shell
-
- use Gimp;
- use Gimp::Fu;
-
- # Definiere die Konstante "pi mal zwei"
- use constant PIx2 => 8 * atan2 1,1;
-
- register "random_art_1", # Funktionsname
- "Create a Random Tile", # Kurzhilfe
- "Create a tileable image by repeatedly drawing colourful polygons",
- # Hilfetext
- "Marc Lehmann", # Autor
- "Marc Lehmann <pcg\@goof.com", # Copyright
- "0.3a", # Version/Datum
- N_"<Toolbox>/Xtns/Render/Random Art #1...", # Men¸pfad
- "", # Bildtypen
- # Eingabeparameter
- # Typ Name Beschreibung Wert
- [
- [PF_INT32, 'width', 'Image Width', 300],
- [PF_INT32, 'height', 'Image Height', 300],
- [PF_SLIDER, 'num_poly', 'Number of Polygons', 20, [5,100,1]],
- [PF_SLIDER, 'edges', 'Number of Edges', 10, [3, 30, 1]],
- [PF_SLIDER, 'revolutions', 'Number of Revolutions',1, [1, 3, 1]],
- [PF_SLIDER, 'feather', 'Feather Radius', 30, [1, 100]],
- [PF_BOOL, 'supersample', 'Adaptive Supersampling?', 0],
- ],
- [PF_IMAGE],
- sub { # Perl-Code
- # Die Parameter werden ganz "normal" ¸bergeben:
- my ($w,$h,$num_poly,$edges,$revolutions,$feather,$super)=@_;
-
- # Erzeuge ein neues Bild
- my $image = new Image($w,$h,RGB);
- $image->undo_disable;
-
- # Erzeuge die erste Ebene f¸r das Bild
- my $layer = $image->layer_new($w,$h,RGB_IMAGE,
- "Random Art #1",100,NORMAL_MODE);
-
- # F¸ge sie in das Bild ein
- $image->add_layer($layer,0);
-
- # Setze die Hintergrundfarben
- Palette->set_background('white');
-
- # ...und lˆsche die Ebene damit
- $layer->fill(BG_IMAGE_FILL);
-
- # Jetzt wurde ein neues, leeres Bild erzeugt, und
- # das Zeichnen kann beginnen.
-
- # Erzeuge zuf‰llige Polygone, f¸lle sie mit einem
- # zuf‰lligen Farbgradienten und verschiebe das Bild
- # wiederholt.
- for (1..$num_poly) {
- my @ecken;
- for (1..$edges*$revolutions) {
- my $r = rand(0.4)+0.1;
- push(@ecken, $w/2+sin($_*PIx2/$edges)*$r*$w,
- $h/2+cos($_*PIx2/$edges)*$r*$h);
- }
-
- # Selektiere die Region
- $image->free_select (\@ecken, REPLACE, 1, 1, $feather);
-
- # W‰hle zuf‰llig zwei Farben aus
- Palette->set_foreground([rand(256),rand(256),rand(256)]);
- Palette->set_background([rand(256),rand(256),rand(256)]);
-
- # Un erzeuge einen Farbverlauf ¸ber das Bild
- $layer->blend (FG_BG_HSV, DIFFERENCE_MODE, LINEAR, 100,
- 0, REPEAT_TRIANGULAR, $super, 2, 3,
- $w/2, $h/2,
- rand($w), rand($h));
-
- # Und dann verschiebe das Bild etwas
- $layer->channel_ops_offset (1,0,(rand(0.8)+0.1)*$w,(rand(0.8)+0.1)*$h);
- }
-
- $image->undo_enable;
-
- # Gib das neu erzeugte Bild zur¸ck, damit es angezeigt wird.
- $image;
- };
-
- exit main;
-
-